package co.edu.dataaccess.dao;

import co.edu.usbcali.modeloo.SubactividadPorActividad;

import java.math.BigDecimal;

import java.util.Date;
import java.util.List;
import java.util.Set;


/**
 * Interface for SubactividadPorActividadDAO.
 *
*/
public interface ISubactividadPorActividadDAO {
    /**
     * Perform an initial save of a previously unsaved SubactividadPorActividad entity. All
     * subsequent persist actions of this entity should use the #update()
     * method. This operation must be performed within the a database
     * transaction context for the entity's data to be permanently saved to the
     * persistence store, i.e., database. This method uses the
     * {@link javax.persistence.EntityManager#persist(Object) EntityManager#persist}
     * operation.
     *
     * <pre>
     * EntityManagerHelper.beginTransaction();
     * ISubactividadPorActividadDAO.save(entity);
     * EntityManagerHelper.commit();
     * </pre>
     *
     * @param entity
     *            SubactividadPorActividad entity to persist
     * @throws RuntimeException
     *             when the operation fails
     */
    public void save(SubactividadPorActividad entity);

    /**
     * Delete a persistent SubactividadPorActividad entity. This operation must be performed
     * within the a database transaction context for the entity's data to be
     * permanently deleted from the persistence store, i.e., database. This
     * method uses the
     * {@link javax.persistence.EntityManager#remove(Object) EntityManager#delete}
     * operation.
     *
     * <pre>
     * EntityManagerHelper.beginTransaction();
     * ISubactividadPorActividadDAO.delete(entity);
     * EntityManagerHelper.commit();
     * entity = null;
     * </pre>
     *
     * @param entity
     *            SubactividadPorActividad entity to delete
     * @throws RuntimeException
     *             when the operation fails
     */
    public void delete(SubactividadPorActividad entity);

    /**
     * Persist a previously saved SubactividadPorActividad entity and return it or a copy of it
     * to the sender. A copy of the SubactividadPorActividad entity parameter is returned when
     * the JPA persistence mechanism has not previously been tracking the
     * updated entity. This operation must be performed within the a database
     * transaction context for the entity's data to be permanently saved to the
     * persistence store, i.e., database. This method uses the
     * {@link javax.persistence.EntityManager#merge(Object) EntityManager#merge}
     * operation.
     *
     * <pre>
     * EntityManagerHelper.beginTransaction();
     * entity = ISubactividadPorActividadDAO.update(entity);
     * EntityManagerHelper.commit();
     * </pre>
     *
     * @param entity
     *            SubactividadPorActividad entity to update
     * @return SubactividadPorActividad the persisted SubactividadPorActividad entity instance, may not be the
     *         same
     * @throws RuntimeException
     *             if the operation fails
     */
    public SubactividadPorActividad update(SubactividadPorActividad entity);

    public SubactividadPorActividad findById(Integer id);

    /**
     * Find all SubactividadPorActividad entities with a specific property value.
     *
     * @param propertyName
     *            the name of the SubactividadPorActividad property to query
     * @param value
     *            the property value to match
     * @param rowStartIdxAndCount
     *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
     *            row index in the query result-set to begin collecting the
     *            results. rowStartIdxAndCount[1] specifies the the maximum
     *            count of results to return.
     * @return List<SubactividadPorActividad> found by query
     */
    public List<SubactividadPorActividad> findByProperty(String propertyName,
        Object value, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByCriteria(String whereCondition);

    public List<SubactividadPorActividad> findByAmbitosdeasignacion2(
        Object ambitosdeasignacion2);

    public List<SubactividadPorActividad> findByAmbitosdeasignacion2(
        Object ambitosdeasignacion2, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByAmbitosdeasignacionenpf(
        Object ambitosdeasignacionenpf);

    public List<SubactividadPorActividad> findByAmbitosdeasignacionenpf(
        Object ambitosdeasignacionenpf, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByDefectosdealtaseveridad(
        Object defectosdealtaseveridad);

    public List<SubactividadPorActividad> findByDefectosdealtaseveridad(
        Object defectosdealtaseveridad, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByDefectosentregados(
        Object defectosentregados);

    public List<SubactividadPorActividad> findByDefectosentregados(
        Object defectosentregados, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByDefectosentregados2(
        Object defectosentregados2);

    public List<SubactividadPorActividad> findByDefectosentregados2(
        Object defectosentregados2, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByEliminaciondedefectos(
        Object eliminaciondedefectos);

    public List<SubactividadPorActividad> findByEliminaciondedefectos(
        Object eliminaciondedefectos, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByFechaestimadasubactFin(
        Object fechaestimadasubactFin);

    public List<SubactividadPorActividad> findByFechaestimadasubactFin(
        Object fechaestimadasubactFin, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByFechaestimadasubactInicio(
        Object fechaestimadasubactInicio);

    public List<SubactividadPorActividad> findByFechaestimadasubactInicio(
        Object fechaestimadasubactInicio, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByFechalimiteestimada(
        Object fechalimiteestimada);

    public List<SubactividadPorActividad> findByFechalimiteestimada(
        Object fechalimiteestimada, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findById(Object id);

    public List<SubactividadPorActividad> findById(Object id,
        int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByIndicedeproduccionpf(
        Object indicedeproduccionpf);

    public List<SubactividadPorActividad> findByIndicedeproduccionpf(
        Object indicedeproduccionpf, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByIndicedeproduccionpf2(
        Object indicedeproduccionpf2);

    public List<SubactividadPorActividad> findByIndicedeproduccionpf2(
        Object indicedeproduccionpf2, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByIndiceincrementocambiomensual(
        Object indiceincrementocambiomensual);

    public List<SubactividadPorActividad> findByIndiceincrementocambiomensual(
        Object indiceincrementocambiomensual, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByPotencialdedefectos1(
        Object potencialdedefectos1);

    public List<SubactividadPorActividad> findByPotencialdedefectos1(
        Object potencialdedefectos1, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByPotencialdedefectos2(
        Object potencialdedefectos2);

    public List<SubactividadPorActividad> findByPotencialdedefectos2(
        Object potencialdedefectos2, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByProbabilidaddereparacionesdefectuosas(
        Object probabilidaddereparacionesdefectuosas);

    public List<SubactividadPorActividad> findByProbabilidaddereparacionesdefectuosas(
        Object probabilidaddereparacionesdefectuosas, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByReutilizacion(
        Object reutilizacion);

    public List<SubactividadPorActividad> findByReutilizacion(
        Object reutilizacion, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByTamanoderequisitosencasosdeuso(
        Object tamanoderequisitosencasosdeuso);

    public List<SubactividadPorActividad> findByTamanoderequisitosencasosdeuso(
        Object tamanoderequisitosencasosdeuso, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByTamanoinicialdesubactv1(
        Object tamanoinicialdesubactv1);

    public List<SubactividadPorActividad> findByTamanoinicialdesubactv1(
        Object tamanoinicialdesubactv1, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByTamanoinicialdesubactv2(
        Object tamanoinicialdesubactv2);

    public List<SubactividadPorActividad> findByTamanoinicialdesubactv2(
        Object tamanoinicialdesubactv2, int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findByVolumenesdegraficos(
        Object volumenesdegraficos);

    public List<SubactividadPorActividad> findByVolumenesdegraficos(
        Object volumenesdegraficos, int... rowStartIdxAndCount);

    /**
     * Find all SubactividadPorActividad entities.
     *
     * @param rowStartIdxAndCount
     *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
     *            row index in the query result-set to begin collecting the
     *            results. rowStartIdxAndCount[1] specifies the the maximum
     *            count of results to return.
     * @return List<SubactividadPorActividad> all SubactividadPorActividad entities
     */
    public List<SubactividadPorActividad> findAll(int... rowStartIdxAndCount);

    public List<SubactividadPorActividad> findPageSubactividadPorActividad(
        String sortColumnName, boolean sortAscending, int startRow,
        int maxResults);

    public Long findTotalNumberSubactividadPorActividad();
}
